'''
在Python中，Semaphore（信号量）用于控制同时访问特定资源的线程数量
'''
import threading
import time

# Semaphore示例 - 控制最多3个线程同时访问资源
# 允许最多3个线程同时访问，其他线程必须等待，直到其中一个线程释放信号量
semaphore = threading.Semaphore(3)

def worker_semaphore(worker_id):
    with semaphore:  # 使用with语句自动获取和释放信号量
        print(f"Worker {worker_id} 正在使用资源\n")
        time.sleep(2)  # 模拟资源使用
        print(f"Worker {worker_id} 释放资源\n")

# 创建多个线程使用信号量
sem_threads = []
for i in range(5):  # 创建5个线程，但最多3个能同时运行
    t = threading.Thread(target=worker_semaphore, args=(i,))
    sem_threads.append(t)
    t.start()

# 等待所有线程完成
for t in sem_threads:
    t.join()

print("所有Semaphore线程已完成")
